package com.jrx.anytxn.param.service.investor;

import com.jrx.anytxn.common.exception.TxnBizException;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.param.dto.investor.PrInvestorInterestRateReq;
import com.jrx.anytxn.param.dto.investor.PrInvestorInterestRateRes;
import com.jrx.anytxn.param.entity.PrInvestorInterestRate;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 出资方利率表 业务接口
 * @author 黄秋平
 * @date 2020-05-17 22:19
 **/
public interface IPrInvestorInterestRateService {

    /**
     * 根据租户ID分页查询利息参数信息
     * @param pageNum  页码
     * @param pageSize 页大小
     * @param tenantId 租户ID
     * @return
     */
    TxnPage<PrInvestorInterestRateRes> findAllPageByTenId(Integer pageNum, Integer pageSize, String tenantId);

    /**
     * 添加利息参数
     * @param prInvestorInterestRateReq
     * @return
     * @throws TxnException
     */
    PrInvestorInterestRateRes addInterestTable(PrInvestorInterestRateReq prInvestorInterestRateReq) throws TxnException;


    /**
     * 更新利息参数
     * @param prInvestorInterestRateReq 利率请求实体
     * @return
     * @throws TxnException
     */
    PrInvestorInterestRateRes modifyInterestTable(PrInvestorInterestRateReq prInvestorInterestRateReq) throws TxnException;

    /**
     * 通过租户Id和利率表ID删除利息参数
     * @param tenantId   租户Id
     * @param investorInterestId 利率表ID
     * @return
     * @throws TxnException
     */
    Boolean removeByTenIdAndInterestId(String tenantId, String investorInterestId) throws TxnException;

    /**
     * 通过租户ID和利率表ID查询利息参数
     * @param tenantId   租户ID
     * @param investorInterestId 利率表ID
     * @return
     * @throws TxnException
     */
    PrInvestorInterestRateRes findByTenIdAndInterestId(String tenantId, String investorInterestId) throws TxnException;

    /**
     * 通过利率ID，租户id及机构获取利率信息
     * @param investorInterestId
     * @param orgId
     * @param tenantId
     * @return
     * @throws TxnBizException
     */
    PrInvestorInterestRateRes findByInterestId(String investorInterestId, String orgId,String tenantId) throws TxnBizException;

    /**
     * 根据字段查询
     * @param investorInterestId
     * @param orgId
     * @param tenantId
     * @return
     * @throws TxnBizException
     */
    PrInvestorInterestRate findInterestByInterestId(String investorInterestId, String orgId, String tenantId) throws TxnBizException;

    /**
     * 日利率计算
     *
     * @param interest 利率信息
     * @param businessDate 当前业务日期
     * @return BigDecimal 日利率
     * @author liuyang
     * @date 2020-05-18
     */
    BigDecimal getDailyRate(PrInvestorInterestRate interest, Date businessDate);

    /**
     * 月利率计算
     *
     * @param interest 利率信息
     * @param businessDate 当前业务日期
     * @return BigDecimal 月利率
     * @author liuyang
     * @date 2020-05-18
     */
    BigDecimal getMonthRate(PrInvestorInterestRate interest, Date businessDate) ;

    /**
     * 年利率计算
     *
     * @param interest 利率信息
     * @return BigDecimal 年利率
     * @author liuyang
     * @date 2020-05-18
     */
    BigDecimal getYearRate(PrInvestorInterestRate interest);

    /**
     * 获取年利率基础天数
     *
     * @param yearBaseParam 年利率基础因子
     * @return int 年利率基础天数
     * @author liuyang
     * @date 2020-05-18
     */
    int getYearBase(String yearBaseParam);

    /**
     * 获取年利率基础天数
     *
     * @param monthBaseParam 年利率基础因子
     * @return int 年利率基础天数
     * @author liuyang
     * @date 2020-05-18
     */
    int getMonthBase(String monthBaseParam, Date businessDate);
}
